package com.supermap.dataservice.common;

import com.supermap.dataservice.common.dao.CropDao;
import com.supermap.dataservice.util.JSONUtil;
import com.supermap.dataservice.util.SortUtil;
import com.supermap.dubbo.api.agrinfo.entity.Farming;
import com.supermap.dubbo.api.common.CropService;
import com.supermap.dubbo.api.common.entity.Crop;
import com.supermap.dubbo.api.disaster.entity.DisasterDIP;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dubbo.config.annotation.Service;

import javax.annotation.Resource;
import java.util.*;

/**
 * @Author:langhongshuai
 * @Description:作物业务逻辑层
 * @Date:18/1/8 上午11:20
 */
@Service
public class CropServiceImpl implements CropService {
    /**
     *使用指定类初始化日志对象，在日志输出的时候，可以打印出日志信息所在类
     */
    protected static final Logger logger = LoggerFactory.getLogger(CropServiceImpl.class);

    @Resource
    private CropDao cropDao;

    @Override
    public JSONUtil getAllCrops(int levels) {
        //初始化Json封装工具类
        JSONUtil jsonUtil = new JSONUtil();
        List<Crop> crops =null;
        try {
            if(levels!=0){
                //获得所有的作物信息或者科目信息
                crops = cropDao.getAllCropByLevels(levels);
            }else{
                //获得所有的科目以及作物信息
                crops = cropDao.getAllCrop();
                crops = organizeCrop(crops);
            }
            //获取所有的作物信息后返回的json数据
            jsonUtil.setMsg("Get all crops success！");
            jsonUtil.setIsSuccess(true);
            jsonUtil.setCode(200);
            jsonUtil.setData(crops);
        }catch (Exception e) {
            //捕捉数据库异常
            logger.error("CropServiceImpl=>getAllCrops=>DaoException:"+e.getMessage());
            jsonUtil.setMsg("Get all crops flase！");
            jsonUtil.setIsSuccess(false);
            jsonUtil.setCode(100);
        }
        return jsonUtil;
    }

    @Override
    public JSONUtil saveCrop(Crop crop) {
        //初始化Json封装工具类
        JSONUtil jsonUtil = new JSONUtil();
        try {
            //保存作物
            cropDao.saveCrop(crop);

            //获取所有的作物信息后返回的json数据
            jsonUtil.setMsg("Save crop success！");
            jsonUtil.setIsSuccess(true);
            jsonUtil.setCode(200);
            jsonUtil.setData(crop);
        }catch (Exception e) {
            //捕捉数据库异常
            logger.error("CropServiceImpl=>saveCrop=>DaoException:"+e.getMessage());
            jsonUtil.setMsg("Save crop flase！");
            jsonUtil.setIsSuccess(false);
            jsonUtil.setCode(100);
        }
        return jsonUtil;
    }

    @Override
    public JSONUtil updateCrop(Crop crop) {
        //初始化Json封装工具类
        JSONUtil jsonUtil = new JSONUtil();
        try {
            //获得所有的作物信息
            cropDao.updateCrop(crop);

            //获取所有的作物信息后返回的json数据
            jsonUtil.setMsg("update crop success！");
            jsonUtil.setIsSuccess(true);
            jsonUtil.setCode(200);
            jsonUtil.setData(crop);
        }catch (Exception e) {
            //捕捉数据库异常
            logger.error("CropServiceImpl=>updateCrop=>DaoException:"+e.getMessage());
            jsonUtil.setMsg("update crop flase！");
            jsonUtil.setIsSuccess(false);
            jsonUtil.setCode(100);
        }
        return jsonUtil;
    }

    @Override
    public JSONUtil deleteCrop(String id) {
        //初始化Json封装工具类
        JSONUtil jsonUtil = new JSONUtil();
        try {
            //获得所有的作物信息
            cropDao.deleteCrop(id);

            //获取所有的作物信息后返回的json数据
            jsonUtil.setMsg("delte crop success！");
            jsonUtil.setIsSuccess(true);
            jsonUtil.setCode(200);
            jsonUtil.setData(id);
        }catch (Exception e) {
            //捕捉数据库异常
            logger.error("CropServiceImpl=>deleteCrop=>DaoException:"+e.getMessage());
            jsonUtil.setMsg("delete crop flase！");
            jsonUtil.setIsSuccess(false);
            jsonUtil.setCode(100);
        }
        return jsonUtil;
    }

    @Override
    public JSONUtil addUserCrop(String userId, String cropCode) {
        //初始化Json封装工具类
        JSONUtil jsonUtil = new JSONUtil();
        try {
            //增加作物定制
            cropDao.addUserCrop(userId,cropCode);

            //增加作物定制后返回的json数据
            jsonUtil.setMsg("add user crop success！");
            jsonUtil.setIsSuccess(true);
            jsonUtil.setCode(200);
            jsonUtil.setData("");
        }catch (Exception e) {
            //捕捉数据库异常
            logger.error("CropServiceImpl=>addUserCrop=>DaoException:"+e.getMessage());
            jsonUtil.setMsg("add user crop flase！");
            jsonUtil.setIsSuccess(false);
            jsonUtil.setCode(100);
        }
        return jsonUtil;
    }

    @Override
    public JSONUtil deleteUserCrop(String userId, String cropCode) {
        //初始化Json封装工具类
        JSONUtil jsonUtil = new JSONUtil();
        try {
            //删除作物定制
            cropDao.deleteUserCrop(userId,cropCode);

            //删除作物定制后返回的json数据
            jsonUtil.setMsg("delete user crop success！");
            jsonUtil.setIsSuccess(true);
            jsonUtil.setCode(200);
            jsonUtil.setData("");
        }catch (Exception e) {
            //捕捉数据库异常
            logger.error("CropServiceImpl=>deleteUserCrop=>DaoException:"+e.getMessage());
            jsonUtil.setMsg("delete user crop flase！");
            jsonUtil.setIsSuccess(false);
            jsonUtil.setCode(100);
        }
        return jsonUtil;
    }

    @Override
    public JSONUtil getUserCrops(String userid) {
        //初始化Json封装工具类
        JSONUtil jsonUtil = new JSONUtil();
        try {

            List<Crop> functions = cropDao.getUserCropByUserId(userid);
            HashMap functionHM = new HashMap();
            if(functions!=null && functions.size()>0){
                List<Crop> orderEd = new ArrayList<>();
                List<Crop> noOrder = new ArrayList<>();
                for (Crop c:functions) {
                    if("1".equals(c.getFlag())){
                        orderEd.add(c);
                    }else{
                        noOrder.add(c);
                    }
                }
                functionHM.put("orderEd",orderEd);
                functionHM.put("noOrder",noOrder);
            }
            //获得用户所有的作物定制信息后返回的json数据
            jsonUtil.setMsg("Get user crops success！");
            jsonUtil.setIsSuccess(true);
            jsonUtil.setCode(200);
            jsonUtil.setData(functionHM);
        } catch (Exception e) {
            //捕捉数据库异常
            logger.error("CropServiceImpl=>getUserCrops=>DaoException:" + e.getMessage());
            jsonUtil.setMsg("Get user crops flase！");
            jsonUtil.setIsSuccess(false);
            jsonUtil.setCode(100);
        }
        return jsonUtil;
    }

    /**
     * 给作物按等级划分
     * @param list
     * @return
     */
    private List<Crop> organizeCrop(List<Crop> list){
        List<Crop> firstList = new ArrayList<>();
        if(list.size()!=0){
            for (Crop a:list) {
                if (a.getLevel() == 1){
                    List<Crop> secondList = new ArrayList<>();
                for (Crop b : list) {
                    if (b.getLevel()==2){
                    //将科目放到第一级，作物放第二级
                    if(b.getParentid()==a.getId()) {
                        secondList.add(b);
                    }
                }

                }
                //科目添加子节点作物种类
                a.setChildNode(secondList);
                firstList.add(a);
            }
            }
        }
        return firstList;
    }
}
